package j2025.j01;

import java.util.Stack;

/**
 * @Author 猫大仙
 */
public class j0123 {
}

/**
 * 155. 最小栈
 * 设计一个支持 push ，pop ，top 操作，并能在常数时间内检索到最小元素的栈。
 *
 * 实现 MinStack 类:
 *
 * MinStack() 初始化堆栈对象。
 * void push(int val) 将元素val推入堆栈。
 * void pop() 删除堆栈顶部的元素。
 * int top() 获取堆栈顶部的元素。
 * int getMin() 获取堆栈中的最小元素。
 */
class MinStack {

 Stack<Integer> stack ;
 Stack<Integer> minstack ;
 public MinStack() {
  stack = new Stack<>();
  minstack = new Stack<>();
 }

 public void push(int val) {
  stack.push(val);
  if(minstack.empty()){
   minstack.push(val);

  }else {
   Integer peekval = minstack.peek();
   if(val <= peekval){
    minstack.push(val);
   }
  }
 }

 public void pop() {
  if(stack.empty()){
   return;
  }
  int popval = stack.pop();
  if(popval == minstack.peek()){
   minstack.pop();
  }
 }

 public int top() {
  if(stack.empty()){
   return -1;
  }
  return stack.peek();
 }

 public int getMin() {
  if(minstack.empty()){
   return -1;
  }
  return minstack.peek();
 }
}

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.push(val);
 * obj.pop();
 * int param_3 = obj.top();
 * int param_4 = obj.getMin();
 */
